package br.com.cefetrn.apoena.util;

import java.sql.SQLException;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;


/**
 * @author Gilmar
 *
 */
public class HibernateUtil {
   
	public static final ThreadLocal session = new ThreadLocal();
	
	public static final SessionFactory sessionFactory;
	
    static {
    	
        try {
           
        	sessionFactory = new Configuration().configure().buildSessionFactory();
        	
        } catch (HibernateException ex) {
        	
        	ex.printStackTrace();
            
        	throw new RuntimeException("Exception building SessionFactory: " + ex.getMessage(), ex);
        }
    }
    
    public static Session currentSession() throws HibernateException {
        
    	Session s = (Session) session.get();
        
        // Open a new Session, if this Thread has none yet
        try {
			if (s == null || s.connection().isClosed()) {
			    s = sessionFactory.openSession();
			    session.set(s);
			}
		} catch (HibernateException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
        return s;
    }
    public static void closeSession() throws HibernateException {
        Session s = (Session) session.get();
        session.set(null);
        if (s != null)
            s.close();
    }
	
    public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}
}